package com.company.project.common.utils;

import lombok.extern.slf4j.Slf4j;

import java.util.Map;

/**
 * 参数转换工具类
 * 用于安全地处理Map中的参数类型转换
 */
@Slf4j
public class ParamUtils {

    /**
     * 安全地将Map中的值转换为Integer
     * @param params 参数Map
     * @param key 键名
     * @return Integer值，如果转换失败返回null
     */
    public static Integer getInteger(Map<String, Object> params, String key) {
        Object value = params.get(key);
        if (value == null) {
            return null;
        }
        
        if (value instanceof Integer) {
            return (Integer) value;
        } else if (value instanceof String) {
            String strValue = (String) value;
            if (strValue.trim().isEmpty()) {
                return null;
            }
            try {
                return Integer.parseInt(strValue);
            } catch (NumberFormatException e) {
                log.warn("参数{}转换Integer失败: {}", key, strValue);
                return null;
            }
        } else if (value instanceof Number) {
            return ((Number) value).intValue();
        }
        
        log.warn("参数{}类型不支持转换为Integer: {}", key, value.getClass().getSimpleName());
        return null;
    }

    /**
     * 安全地将Map中的值转换为String
     * @param params 参数Map
     * @param key 键名
     * @return String值，如果转换失败返回null
     */
    public static String getString(Map<String, Object> params, String key) {
        Object value = params.get(key);
        if (value == null) {
            return null;
        }
        
        if (value instanceof String) {
            return (String) value;
        } else {
            return value.toString();
        }
    }

    /**
     * 安全地将Map中的值转换为Boolean
     * @param params 参数Map
     * @param key 键名
     * @return Boolean值，如果转换失败返回null
     */
    public static Boolean getBoolean(Map<String, Object> params, String key) {
        Object value = params.get(key);
        if (value == null) {
            return null;
        }
        
        if (value instanceof Boolean) {
            return (Boolean) value;
        } else if (value instanceof String) {
            String strValue = (String) value;
            if (strValue.trim().isEmpty()) {
                return null;
            }
            return Boolean.parseBoolean(strValue);
        } else if (value instanceof Number) {
            return ((Number) value).intValue() != 0;
        }
        
        log.warn("参数{}类型不支持转换为Boolean: {}", key, value.getClass().getSimpleName());
        return null;
    }
}
